A need frequently arises to buffer the data being transferred from a first data bus to a second data bus. This need typically occurs where the busses have different operating characteristics, different timing requirements or different handshaking protocols associated therewith. For example, each data bus may be an independently asynchronous bus with no direct synchronization between the two busses. Another example is the case where one of the busses may sometimes be busy with other matters and may not be available for data transfers to the other bus when the latter is ready to engage in a data transfer. A further example is the case where the width of one data bus is different from the width of the other data bus, that is, the numbers of data lines in the two busses are not the same. Another example is the case where the units coupled to the busses have different data transfer rates.
It is known to use a storage array or memory array to provide a buffer between two data busses. Data is received from one data bus and stored in the storage array in one manner and is thereafter read out and supplied to the other data bus in a somewhat different manner. The storage array provides a flexible medium or buffer for accommodating the differences associated with the two data busses and the operating units coupled to the two busses.
One form of data buffer mechanism that has been heretofor proposed is a so-called "ping-pong" buffer mechanism. In this case, a pair of storage arrays are provided and data received from one bus is written into one array while data is read out of the other array and supplied to the other bus. The read and write functions of the two storage arrays are interchanged back and forth from time to time so that data is written into one array and then the other array in an alternating manner and data is read out from the other array and then the one array in an alternating manner which is the opposite of that used for the writing. A data buffer mechanism of this type can provide more efficient and faster overall data transfer operations in various applications.